import matplotlib.pyplot as plt

def plot_sweep(
        x,  # x轴数据
        y,  # y轴数据，可以是单一的列表，也可以是包含多个列表的列表
        xlabel,  # x轴标签
        ylabel,  # y轴标签
        yerr=(),  # y轴误差数据（可选），与 y 数据的维度匹配
        legend=(),  # 图例标签（可选），用于标识不同的数据系列
        title=''  # 图表标题（可选）
):
    """
    绘制一个散点图或误差条图。

    参数:
        x (list or ndarray): x轴的数据。
        y (list or list of lists or ndarray): y轴的数据。如果是多个数据系列，则应为一个列表，其中每个元素都是一个数据系列的 y 值。
        xlabel (str): x轴的标签。
        ylabel (str): y轴的标签。
        yerr (list of lists or ndarray, optional): y轴的误差数据，与 y 的维度相匹配。
        legend (list of str, optional): 图例标签，标识不同的数据系列。
        title (str, optional): 图表标题。
    """
    
    fig, ax = plt.subplots()  # 创建一个图形和坐标轴对象

    if type(y) is list:
        # 如果 y 是列表，表示有多个数据系列
        for y_idx, y_category in enumerate(y):
            # 遍历每个数据系列
            if yerr:
                # 如果有误差数据，绘制误差条图
                ax.errorbar(x, y_category, yerr=yerr[y_idx], label=legend[y_idx] if legend else None)
            else:
                # 否则，绘制散点图
                ax.scatter(x, y_category, label=legend[y_idx] if legend else None)

    else:
        # 如果 y 不是列表，则认为是单一数据系列
        if any(yerr):
            # 如果有误差数据，绘制误差条图
            ax.errorbar(x, y, yerr=yerr, label=legend if legend else None)
        else:
            # 否则，绘制散点图
            ax.scatter(x, y, label=legend if legend else None)

    ax.set_xlabel(xlabel)  # 设置 x 轴标签
    ax.set_ylabel(ylabel)  # 设置 y 轴标签

    if legend:
        # 如果有图例标签，显示图例
        ax.legend()

    if title:
        # 如果有标题，设置图表标题
        fig.suptitle(title)

    ax.grid()  # 显示网格线

    fig.tight_layout()  # 自动调整子图参数，以使图像填充整个图像区域
